package theorie;

public class PCP{
  // Die beiden folgenden Arrays enthalten die Wortmengen.
  // Diese müssen gleich viele Elemente haben.
  static String[] blau={"aab","ab","ab","ba"};
  static String[] gelb={"a","abb","bab","aab"};

  static StringBuilder blautext=new StringBuilder();
  static StringBuilder gelbtext=new StringBuilder();
  static int system=blau.length;//=gelb.systemgth
  static int[] index=new int[0];
  static boolean found=false;
  
  public static void main(String[] args){
    while(!found){
      index=new int[index.length+1];
      System.out.println("Versuchen wir's mit "+index.length+" Stufen!");
      gleich(0,0,0);
    }
  }

  public static void gleich(int pos, int bi, int gi){
    if(pos<index.length)
      wort: for(int i=0; i<system; ++i){
        blautext.setLength(bi);
        gelbtext.setLength(gi);
        blautext.append(blau[i]);
        gelbtext.append(gelb[i]);
        index[pos]=i;
        int l=bi<gi?bi:gi;
        int r=blautext.length()<gelbtext.length()?blautext.length():gelbtext.length();
        for(; l<r; ++l)
          if(blautext.charAt(l)!=gelbtext.charAt(l)) continue wort;
        if(blautext.length()==gelbtext.length()){
          for(int j=0; j<index.length; ++j)
            System.out.print(index[j]+" ");
          System.out.println("\n"+blautext);
          found=true;
        } else gleich(pos+1, blautext.length(), gelbtext.length());
      }
  }
}
